'''
Created on 23/10/2012

@author: Romina
'''

## -*- coding: utf-8 -*-

if 0:
    None
    import gluon
    import gluon.languages.translator as T
    from gluon.html import A, DIV, TABLE, TR, TD, SELECT, OPTION, XML, URL, INPUT, H3
    from repositories.sigecon.comunicacion import ComunicacionRepository as comunicaciones
    from repositories.sigecon.comunicacion import CondicionRepository as condiciones
    from repositories.sigecon.consulta import ConsultaRepository as consultas
    from repositories.sigecon.consulta import TipoConsultaRepository as tipos
    from repositories.sigecon.consulta import SubtipoConsultaRepository as subtipos
    from repositories.sigecon.consulta import RespuestaRepository as respuestas
    from repositories.sigecon.consulta import ConsultaHistoryRepository as consultas_archive
    from repositories.sigecon.usuario import SectorRepository as sectores
    from repositories.sigecon.usuario import AuthRepository as auth

import json
import datetime
from domain.forms.sqlforms import FormFactory
from domain.entities.comunicacion import Comunicacion
from domain.entities.consulta import Consulta, ConsultaHistorico

T.force('es-es')


def inicializar_con_request_vars(modificada):
    modificada.tipo = tipos.findOne(request.vars.consulta)
    modificada.subtipo = subtipos.findOne(request.vars.subconsulta)
    modificada.respuesta = respuestas.findOne(request.vars.respuesta)
    modificada.comentario = request.vars.comentarios
    modificada.sector = sectores.findOne(request.vars.sector)
    modificada.finalizado = True
    if modificada.respuesta and (modificada.respuesta.codigo == "DERIVADA" or modificada.respuesta.codigo == "PENDIENTE"):
        modificada.finalizado = False
        
        
def add_ajax(form):

    consultas_onchange = form.element(_name='consulta')
    consultas_onchange['_onchange'] = XML("ajax('" + URL(r=request, c = 'combos', f='select_subconsultas_por_consulta') + "', ['consulta'], 'div_no_table_subconsulta__row');ajax('" + URL(r=request, c = 'combos', f='select_respuestas_por_subconsulta') + "', ['subconsulta'], 'div_no_table_respuesta__row')")
    
    subconsulta_onchange = form.element(_name='subconsulta')
    subconsulta_onchange['_onchange'] = XML("ajax('" + URL(r=request, c = 'combos', f='select_respuestas_por_subconsulta') + "', ['subconsulta'], 'div_no_table_respuesta__row'); ajax('" + URL(r=request, c = 'combos', f='select_sectores_por_respuesta') + "', ['respuesta'], 'div_no_table_sector__row')")
    
    respuesta_onchange = form.element(_name='respuesta')
    respuesta_onchange['_onchange'] = XML("ajax('" + URL(r=request, c = 'combos', f='select_sectores_por_respuesta') + "', ['respuesta'], 'div_no_table_sector__row')")
    

def modificaciones_load_mis_consultas():
    data_list = []
    rows = 0
    #se cargan todas las consultas pertenecientes a un usuario
    usuario = auth.get_user()
    resultados = consultas.findByUser(usuario)
    for resultado in resultados:
        consulta = Consulta()
        consulta = resultado
        consulta.comunicacion = comunicaciones.findOne(consulta.comunicacion.ID)
        consulta.comunicacion.condicion = condiciones.findOne(consulta.comunicacion.condicion.ID)
        consulta.tipo = tipos.findOne(consulta.tipo.ID)
        consulta.subtipo = subtipos.findOne(consulta.subtipo.ID)
        consulta.respuesta = respuestas.findOne(consulta.respuesta.ID)
        diccionario = dict(
                    fecha = consulta.comunicacion.fecha.strftime("%d/%m/%Y %H:%M"),
                    numero = consulta.ID,
                    nombre = consulta.comunicacion.nombre,
                    tipo = consulta.comunicacion.condicion.descripcion,
                    consulta = consulta.tipo.descripcion,
                    subconsulta = consulta.subtipo.descripcion,
                    comentario = consulta.comentario
        )
        data_list.append(diccionario)
        rows = rows + 1
        
    res = dict(data_list = data_list, rows = rows)
    return json.JSONEncoder().encode(res)

@auth.requires_login()  
@auth.requires_membership("CARGA")  
def modificaciones_find():        
    form = FORM(
              BR(),
              DIV(
                  DIV(_id='tipo'),
                  DIV(_id='nombre'),
                  DIV(_id='consulta'),
                  DIV(_id='subconsulta'),
                  _id = "list-container"),
              DIV(_id = "grid"),
              _class = "form_grilla_pendientes")


    return dict(title = "Consultas cargadas por " + auth.get_user().nombre + " " + auth.get_user().apellido, form = form)

 

@auth.requires_login()   
def modificaciones_modify():
    
    if len(request.args) == 0:
        raise HTTP(404)
    
    consulta = Consulta()
    consulta = consultas.findOne(request.args[0])
    
    if consulta == None:
        raise HTTP(404)
    
    consulta.comunicacion = comunicaciones.findOne(consulta.comunicacion.ID)
    consulta.comunicacion.modalidad = modalidades.findOne(consulta.comunicacion.modalidad.ID)
    consulta.comunicacion.condicion = condiciones.findOne(consulta.comunicacion.condicion.ID)
    consulta.tipo = tipos.findOne(consulta.tipo.ID)
    consulta.subtipo = subtipos.findOne(consulta.subtipo.ID)
    consulta.respuesta = respuestas.findOne(consulta.respuesta.ID)

    datos = DIV(
        DIV(LABEL("Fecha:"), consulta.comunicacion.fecha.strftime("%d/%m/%Y %H:%M")),
        DIV(LABEL("Modalidad: ") , consulta.comunicacion.modalidad.descripcion),
        DIV(LABEL("Numero: ") , consulta.ID),
        DIV(LABEL("Consultante: "), consulta.comunicacion.condicion.descripcion),
        DIV(LABEL("Nombre: "), consulta.comunicacion.nombre),
        DIV(LABEL("Telefono: "), consulta.comunicacion.telefono),
        DIV(LABEL("Mail: "), consulta.comunicacion.mail),
        DIV(LABEL("Consulta: "), consulta.tipo.descripcion),
        DIV(LABEL("Subconsulta: "), consulta.subtipo.descripcion),
        DIV(LABEL("Respuesta: "), consulta.respuesta.descripcion),
        DIV(LABEL("Comentario: "), consulta.comentario),
    )
    
    if (consulta.respuesta.codigo == "DERIVADA"):
        idSectorOrigen = auth.userById(consulta.comunicacion.usuario.ID).sector.ID
        consulta.sector = sectores.findOne(idSectorOrigen)
        datos.append(DIV(LABEL("Derivada de: "), consulta.sector.descripcion))

    modificada = Consulta()
    modificada.ID = consulta.ID
    modificada.comunicacion = consulta.comunicacion
    inicializar_con_request_vars(modificada)
    consultas.refresh_requires(modificada)
    form = FormFactory.carga_consulta(consultas.tabla) 
    add_ajax(form)

    
    if form.process(dbio=False).accepted:
        #modifico la consulta y guardo en el historial
        historica = ConsultaHistorico()
        historica.referencia = consulta.ID
        historica.comunicacion = consulta.comunicacion
        historica.tipo = consulta.tipo
        historica.subtipo = consulta.subtipo
        historica.respuesta = consulta.respuesta
        historica.comentario = consulta.comentario
        historica.sector = consulta.sector
        historica.finalizado = consulta.finalizado
        historica.usuario = consulta.usuario
        historica.fecha = consulta.fecha
        consultas_archive.save(entity = historica)
        consultas.update(entity = modificada)
        redirect(URL(request.application, 'modificaciones', 'modificaciones_find'))
        session.flash = "La consulta " + str(modificada.ID) + " fue modificada"
    
    return dict(title = T("Resolucion") + " de consulta pendiente", datos = datos, form = form)
